컨텍스트 스위칭
컨텍스트(Context)란?
컨텍스트는 사용자와 다른 사용자, 혹은 사용자와 시스템 또는 디바이스 간의 상호작용에 영향을 미치는 사람, 장소, 개체 등의 현재 상태를 규정하는 정보
들이다.
오늘 살펴본 OS에서의 컨텍스트는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보
들이다.
이러한 컨텍스트는 프로세스의 PCB(Process Control Block)
에 저장된다.
PCB(Process Control Block)
이미지 출처 : https://velog.io/@underlier12/OS-16-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%AD-%EC%9B%90%EB%A6%AC
PCB란 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소
를 뜻한다.
PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다. 프로세스 상태 관리와 컨텍스트 스위칭을 위해 필요하다.
위 이미지는 PCB의 정보 저장 구조에 관한 이미지이고 PCB에는 다음과 같은 정보가 저장된다.
- 프로세스 상태 : 생성, 준비, 수행, 대기, 중지
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
- 레지스터 : 누산기, 스택, 색인 레지스터
- 프로세스 번호
컨텍스트 스위칭 (Context Switching)
컴퓨터가 매번 하나의 Task만 처리할 수 있다면 해당 Task가 끝날 때까지 다음 Task는 기다려야 할 것이고 매우 느린 속도에 사용하기 불편할 것이다.
다양한 사람들이 동시에 사용하는 것처럼 하기 위해서는 빠른 속도로 Task를 바꿔 실행해 실시간처럼 보이도록 해야 했고, CPU가 Task를 바꿔가며 실행하기 위해 Context Switching이 필요하게 되었다.
또한 새로 실행되는 Task가 아니라면 이전에 실행될 때 레지스터들이 지니고 있던 데이터들을 불러와서 이어서 실행해야 하므로 컨텍스트 스위칭이 필요하게 되었다.
Context Switching이란 멀티프로세스 환경에서 CPU가 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해
다음 우선순위 프로세스가 실행돼야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업이다.
컨텍스트 스위칭의 순서
이미지 출처 : https://velog.io/@underlier12/OS-17-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%AD-%EC%A0%95%EB%A6%AC
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트하여 메인 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행
컨텍스트 스위칭의 단점
- 프로세스가 변경되는 과정에서 데이터를 서로 백업하기 때문에
CPU의 과부하
가 생길 수 있다. - 컨텍스트 스위칭이 잦으면
오버헤드가 발생
해서 성능이 떨어질 수 있다.
면접에 나올 수 있는 질문
Q. 컨텍스트 스위칭이란?
A. 현재 진행하고 있는 Task의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정
Q. 컨텍스트 스위칭이 필요한 이유
A. 빠른 속도로 Task를 처리하면서 동시에 실행되는 것처럼 느낄 수 있게 하기 위해, 또한 이전에 실행하던 데이터 정보를 불러와서 이어서 실행할 수 있게 하기 위해 필요하다.
Q. 컨텍스트 스위칭 비용은 프로세스와 스레드 중 어디서 더 많이 드는가
A. 컨텍스트 스위칭 비용은 프로세스가 더 많이 든다. 스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에 context switching 발생 시 스택 영역만 변경하면 되기 때문이다.
참고
- Context Switching이란?
- OS::컨텍스트 스위칭(Context Switching)
- OS - Context Switch(컨텍스트 스위치)가 무엇인가?
- [운영체제]PCB (Process Control Block)란?...
기여자
Jongminfire
📦